/**
 * koa框架路由插件
 * 
 * 注册全局中间件
 */

import KoaRouter from 'koa-router'


export default async (server) => {
    // 注册全局中间件
    server.koa.use(async (ctx, next) => {
        /**
         * 挂载server实例对象
         * @member {Object} server实例对象
         */
        ctx.server = server;
        /**
         * 挂载$response响应统一方法
         * @param {Object} body 
         */
        ctx.$response = (body) => {
            ctx.status = 200;
            ctx.body = body
        }
        /**
         * 挂载locale本地化处理方法
         */
        ctx.$locale = (key) => {
            const acceptLanguage = ctx.header['accept-language'] || 'zh-CN';
            const locale = acceptLanguage.replace('-', '');
            const language = server.localeConfig[locale] || 'zhCN';
            return language[key] || key;
        }
        /**
         * 请求开始时间
         * @member {Number} 上下文开始时间
         */
        ctx.starttime = Date.now();
        /**
         * 执行下一个中间件
         */
        await next();
        /**
         * 请求响应耗时
         * @member {Number} 上下文耗时ms
         */
        ctx.expendtime = Date.now() - ctx.starttime;
        
        // 控制台打印请求响应日志
        console.log(new Date().toLocaleString(), `|`, ctx.method, `(${ctx.expendtime}ms)`, `"${ctx.path}"`)
    });
    // 注册路由中间件
    server.router = new KoaRouter();
    server.koa.use(server.router.routes()).use(server.router.allowedMethods());
}